\section{ROOT Befehle}

\begin{lstlisting}[caption=Einige ROOT Befehle]{Test}
TGeoManager::Import("test.gdml")  
               \\ Die Datei test.gdml einlesen
gGeoManager->GetTopVolume()->Draw("ogl") 
               \\ Aktuell im gGeoManager eingelesene Datei mit 
               \\  Open GL visualisieren
gGeoManager->SetVisLevel(2)
               \\ Gibt an, bis zu welcher Tiefe (Erinnerung: 
               \\  hierarchischer Aufbau) die Volumenes
               \\  visualisiert werden
a = gGeoManager->GetVolume("einVolume")
               \\ Pointer auf Volumen namens einVolume aus dem
               \\  aktuell eingelesenen Datensatz in Variable a 
               \\  schreiben
a->SetLineColor(COLOR)
               \\ Oberflaechenfarbe eines Volumens setzen; COLOR
               \\  ist eine ganze Zahl Typ Short oder ein String
               \\  einer Grundfarbe mit einem k davor, 
               \\  z.B. 'kRed'
a->SetInvisible()
               \\ Das Volumen unsichtbar machen, sodass es nicht 
               \\  visualisiert wird
\end{lstlisting}
%\todo{Ich finde, die Matlabauswertung koennte hier noch gut mit rein. MT
%
%Prinzipiell stimme ich zu. Aber eine der Auswertungdateien reicht, denke ich, auswertung\_head.m wuerd ich sagen. HB}
%
%\todo{Ich hatte die auswertung\_head.m noch optimiert um den Arbeitsspeicherverbraucht gering zu halten. Das habe ich aber nicht direkt bei der auswertung\_head.m sondern bei der auswertung\_head\_mult.m gemacht mit der man mehrere Datendateien einlesen kann. Ich habe zwei Codeversionen aufgearbeitet und eingebunden. Die erste liesst mehrere Dateien ein und die zweite nur eine. Bei letzterer spare ich aber nicht viel Platz ein. Man kann noch ein paar weitere Sachen beschneiden - siehe unten. Ich bin dafuer die erste Codeversion einbinden und sie nicht zu verkuerzen. Sie beinhaltet folgende Sachen: a) Position des Tumors wird markiert, b) der Nutzer kann waehlen von welcher Seite der Kopf gezeigt wird und c) es koennen mehrere Dateien eingelesen werden. Ganz hinten habe ich noch eine dritte Version angehaengt. Sie geht ueber 2 statt 3,5 Seiten. Nachwievor bevorzuge ich aber die erste Version.}

\begin{lstlisting}[caption=Auswertungsdatei fuer Matlab zum Erstellen der Kopfplots]{Test}
clear all; clc;
% Hochrechnung auf eine Sekunde Bestrahlung, Soll:10^16  Photonen
simfaktor = 1e11; % 10^16 = simfaktor*(Anz. Photonen in Simulation)

% Von welcher Seite soll das Bild erstellt werden?
view = 'top'; % Auswahloptionen: top, front, side

%% Hinweis zu den Indizes:
% Die Indizes X, Y und Z stehen fuer die 3 Dimensionen in der 
%  Logdatei bzw. in der Simulation.
% Die Indizes 1 und 2 an den entsprechenden Variablen stehen fuer 
%  die 2 Dimensionen in den 2D Plots. Variablen mit X, Y und Z
%  sagen also nichts direkt ueber das Aussehen der Plots aus.

nDiv = 400;  % Anzahl Voxel in Logdatei und in Plot
nDivX = nDiv; nDivY = nDiv; nDivZ = nDiv;
% Laenge eines Voxels in mm
lenX = 400/nDivX; lenY = 400/nDivY; lenZ = 400/nDivZ;

tumorX = ceil(0.5*nDivX);	% Position Mittelpunkt Tumor
tumorY = ceil(250/400*nDivY); tumorZ = ceil(190/400*nDivZ);

switch(view) % Abhaengig der Betrachtungsrichtung Werte setzen.
    case 'front'
        schnittebene = tumorZ;
        nDiv1 = nDivY; len1 = lenY; tum1 = tumorY;
        nDiv2 = nDivX; len2 = lenX; tum2 = tumorX;
    case 'top'
        schnittebene = tumorY;
        nDiv1 = nDivX; len1 = lenX; tum1 = tumorX;
        nDiv2 = nDivZ; len2 = lenZ; tum2 = tumorZ;
    case 'side'
        schnittebene = tumorX;
        nDiv1 = nDivY; len1 = lenY; tum1 = tumorY; 
        nDiv2 = nDivZ; len2 = lenZ; tum2 = tumorZ;
end

% Tumor einzeichnen und weitere Werte fuer Visualisierung setzen
tumPix = 100;	% Anzahl Pixel, die Tumor markieren. 100 ist gut
tumRad = 20;				% mm
tumSurf1 = zeros(2*tumPix,1);	% Arrays fuer Tumormarkierungen
tumSurf2 = zeros(2*tumPix,1);
for k = 1:tumPix		% Tumormarkierungen erstellen
    tumSurf1(k) = ceil(tumRad/len1*cos((k-1)/tumPix*2*pi)+tum1);
    	helpT = (tumRad-len1)/len1*cos((k-1)/tumPix*2*pi)+tum1;
    tumSurf1(k+tumPix) = ceil();
    tumSurf2(k) = ceil(tumRad/len2*sin((k-1)/tumPix*2*pi)+tum2);
    	helpT = (tumRad-len2)/len2*sin((k-1)/tumPix*2*pi)+tum2;
    tumSurf2(k+tumPix) = ceil(helpT);
end

% Leere Sparcematrix zum Einlesen der Daten
matrix2D = sparse(nDiv1,nDiv2);

if(exist('filename', 'var') == 0) 	% Dateien einlesen
    [filename, pathname] = uigetfile('.log', 'MultiSelect', 'on');

    if ~iscell(filename)    % Wenn nur eine Datei gewaehlt wurde.
        filename = {filename};
    end
    
    kEnd = numel(filename);	% Anzahl an einzulesender Dateien.
    
    for k=1:kEnd		% Dateien einzeln durchgehen.
        file = fopen(fullfile(pathname, filename{k}), 'r');
        input = fscanf(file,'%u\t%e\t%e\n',[3 inf]);
        fclose(file);
        
        % Anzahl Eintraege/Zeilen in aktuell eingelesener Datei
        entries = numel(input(1,:));
        
        for i=1:entries	% Durch alle Eintraege durchgehen.
            % Jeder Eintrag entspricht einem Voxel und jedes Voxel 
            %  hat eine Nummer. Anhang dieser Nummer wird die 
            %  Koordiante des Voxels (nx, ny, nz) berechnet. Die 
            %  Voxelnummer ist in Spalte 1 des Arrays input.
            % Es gilt: Voxelnummer = nz + ny*nDivZ + nx*nDivY*nDivZ
            nx = floor(input(1,i) / (nDivY*nDivZ));
            ny = floor((input(1,i) - nx*nDivY*nDivZ) / nDivZ);
            nz = input(1,i) - nx*nDivY*nDivZ - ny*nDivZ;
            
            switch(view) % Werte fuer Betrachperspektive setzen.
                case 'front'
                    n1 = ny+1; n2 = nx+1; nSchnitt = nDivZ-nz;
                case 'top'
                    n1 = nx+1; n2 = nDivZ-nz; nSchnitt = ny+1;
                case 'side'
                    n1 = ny+1; n2 = nDivZ-nz; nSchnitt = nx+1;
            end
            
            % Daten werden nur fuer die Schnittebene, die der 
            %  Betrachter spaeter als Plot sieht, rausgeschnitten.
            if nSchnitt == schnittebene
                matrix2D(n1, n2) = matrix2D(n1, n2) + input(3,i)*simfaktor;
            end
        end
        clear input; % clear memory
    end
end

fig = figure('Position', [0, 0, 800, 664]); % Figure erstellen
load cmap; colormap(cmap); % Colormap laden

set(gca, 'XLim', [0 nDiv2*len2]); set(gca, 'YLim', [0 nDiv1*len1]);

%clim = [1e-3 1e-1]; 	% anzuzeigendes Energieinterval Strahlung
clim = [1e-2 1e4]; 	% anzuzeigendes Energieinterval Ionen

for k = 1:tumPix 	% Tumor wird in Daten eingezeichnet.
    matrix2D(tumSurf1(k), tumSurf2(k)) = 1e-1;
end

linear_axes = subplot(1,1,1); 	% Plotten
lin_plot = pcolor(linear_axes, matrix2D);

set(gca, 'CLim', clim);
colorbar('Yscale', 'log');

% Logarithmischer Plot (Matlab ausgetrickst)
set(linear_axes, 'Visible', 'off');
set(lin_plot, 'Visible', 'off');

log_axes = axes('Position', get(linear_axes, 'Position'));
log_plot = pcolor(log_axes, log10(matrix2D));
set(log_plot, 'EdgeColor','none');
set(gca, 'CLim', log10(clim));

axis square tight;

title('Radiation Dosimetry of Patient (Gy)');
\end{lstlisting}

%\todo{kuerzer}
%
%\begin{lstlisting}[caption=Auswertungsdatei fuer Matlab zum Erstellen der Kopfplots]{Test}
%clear all; clc;
%% Hochrechnung auf eine Sekunde Bestrahlung, Soll:10^16  Photonen
%simfaktor = 1e11; % 10^16 = simfaktor*(Anz. Photonen in Simulation)
%
%% Von welcher Seite soll das Bild erstellt werden?
%view = 'top'; % Auswahloptionen: top, front, side
%
%%% Hinweis zu den Indizes:
%% Die Indizes X, Y und Z stehen fuer die 3 Dimensionen in der 
%%  Logdatei bzw. in der Simulation.
%% Die Indizes 1 und 2 an den entsprechenden Variablen stehen fuer 
%%  die 2 Dimensionen in den 2D Plots. Variablen mit X, Y und Z
%%  sagen also nichts direkt ueber das Aussehen der Plots aus.
%
%nDiv = 400;  % Anzahl Voxel in Logdatei und in Plot
%nDivX = nDiv; nDivY = nDiv; nDivZ = nDiv;
%% Laenge eines Voxels in mm
%lenX = 400/nDivX; lenY = 400/nDivY; lenZ = 400/nDivZ;
%
%tumorX = ceil(0.5*nDivX);	% Position Mittelpunkt Tumor
%tumorY = ceil(250/400*nDivY); tumorZ = ceil(190/400*nDivZ);
%
%switch(view) % Abhaengig der Betrachtungsrichtung Werte setzen.
%    case 'front'
%        schnittebene = tumorZ;
%        nDiv1 = nDivY; len1 = lenY; tum1 = tumorY;
%        nDiv2 = nDivX; len2 = lenX; tum2 = tumorX;
%    case 'top'
%        schnittebene = tumorY;
%        nDiv1 = nDivX; len1 = lenX; tum1 = tumorX;
%        nDiv2 = nDivZ; len2 = lenZ; tum2 = tumorZ;
%    case 'side'
%        schnittebene = tumorX;
%        nDiv1 = nDivY; len1 = lenY; tum1 = tumorY; 
%        nDiv2 = nDivZ; len2 = lenZ; tum2 = tumorZ;
%end
%
%% Tumor einzeichnen und weitere Werte fuer Visualisierung setzen
%tumPix = 100;	% Anzahl Pixel, die Tumor markieren. 100 ist gut
%tumRad = 20;				% mm
%tumSurf1 = zeros(2*tumPix,1);	% Arrays fuer Tumormarkierungen
%tumSurf2 = zeros(2*tumPix,1);
%for k = 1:tumPix		% Tumormarkierungen erstellen
%    tumSurf1(k) = ceil(tumRad/len1*cos((k-1)/tumPix*2*pi)+tum1);
%    	helpT = (tumRad-len1)/len1*cos((k-1)/tumPix*2*pi)+tum1;
%    tumSurf1(k+tumPix) = ceil();
%    tumSurf2(k) = ceil(tumRad/len2*sin((k-1)/tumPix*2*pi)+tum2);
%    	helpT = (tumRad-len2)/len2*sin((k-1)/tumPix*2*pi)+tum2;
%    tumSurf2(k+tumPix) = ceil(helpT);
%end
%
%% Leere Sparcematrix zum Einlesen der Daten
%matrix2D = sparse(nDiv1,nDiv2);
%
%if(exist('filename', 'var') == 0) 	% Dateien einlesen
%    [filename, pathname] = uigetfile('.log');
%
%	% Dateien einzeln durchgehen.
%    file = fopen(fullfile(pathname, filename), 'r');
%    input = fscanf(file,'%u\t%e\t%e\n',[3 inf]);
%    fclose(file);
%        
%    % Anzahl Eintraege/Zeilen in aktuell eingelesener Datei
%    entries = numel(input(1,:));
%        
%    for i=1:entries	% Durch alle Eintraege durchgehen.
%        % Jeder Eintrag entspricht einem Voxel und jedes Voxel 
%        %  hat eine Nummer. Anhang dieser Nummer wird die 
%        %  Koordiante des Voxels (nx, ny, nz) berechnet. Die 
%        %  Voxelnummer ist in Spalte 1 des Arrays input.
%        % Es gilt: Voxelnummer = nz + ny*nDivZ + nx*nDivY*nDivZ
%        nx = floor(input(1,i) / (nDivY*nDivZ));
%        ny = floor((input(1,i) - nx*nDivY*nDivZ) / nDivZ);
%        nz = input(1,i) - nx*nDivY*nDivZ - ny*nDivZ;
%            
%        switch(view) % Werte fuer Betrachperspektive setzen.
%            case 'front'
%                n1 = ny+1; n2 = nx+1; nSchnitt = nDivZ-nz;
%            case 'top'
%                n1 = nx+1; n2 = nDivZ-nz; nSchnitt = ny+1;
%            case 'side'
%                n1 = ny+1; n2 = nDivZ-nz; nSchnitt = nx+1;
%        end
%            
%        % Daten werden nur fuer die Schnittebene, die der 
%        %  Betrachter spaeter als Plot sieht, rausgeschnitten.
%        if nSchnitt == schnittebene
%            matrix2D(n1, n2) = input(3,i)*simfaktor;
%        end
%    end
%    clear input; % clear memory
%end
%
%fig = figure('Position', [0, 0, 800, 664]); % Figure erstellen
%load cmap; colormap(cmap); % Colormap laden
%
%set(gca, 'XLim', [0 nDiv2*len2]); set(gca, 'YLim', [0 nDiv1*len1]);
%
%%clim = [1e-3 1e-1]; 	% anzuzeigendes Energieinterval Strahlung
%clim = [1e-2 1e4]; 	% anzuzeigendes Energieinterval Ionen
%
%for k = 1:tumPix 	% Tumor wird in Daten eingezeichnet.
%    matrix2D(tumSurf1(k), tumSurf2(k)) = 1e-1;
%end
%
%linear_axes = subplot(1,1,1); 	% Plotten
%lin_plot = pcolor(linear_axes, matrix2D);
%
%set(gca, 'CLim', clim);
%colorbar('Yscale', 'log');
%
%% Logarithmischer Plot (Matlab ausgetrickst)
%set(linear_axes, 'Visible', 'off');
%set(lin_plot, 'Visible', 'off');
%
%log_axes = axes('Position', get(linear_axes, 'Position'));
%log_plot = pcolor(log_axes, log10(matrix2D));
%set(log_plot, 'EdgeColor','none');
%set(gca, 'CLim', log10(clim));
%
%axis square tight;
%
%title('Radiation Dosimetry of Patient (Gy)');
%\end{lstlisting}
%
%\todo{noch kuerzer}
%
%\begin{lstlisting}[caption=Auswertungsdatei fuer Matlab zum Erstellen der Kopfplots]{Test}
%clear all; clc;
%% Hochrechnung auf eine Sekunde Bestrahlung, Soll:10^16  Photonen
%simfaktor = 1e11; % 10^16 = simfaktor*(Anz. Photonen in Simulation)
%
%nDiv = 400;  % Anzahl Voxel in Logdatei und in Plot
%nDiv1 = nDiv; nDiv2 = nDiv; 
%schnittebene = ceil(0.5*nDiv);
%% Laenge eines Voxels in mm
%len1 = 400/nDiv1; len2 = 400/nDiv2;
%
%% Leere Sparcematrix zum Einlesen der Daten
%matrix2D = sparse(nDiv1,nDiv2);
%
%if(exist('filename', 'var') == 0) 	% Dateien einlesen
%    [filename, pathname] = uigetfile('.log');
%
%	% Dateien einzeln durchgehen.
%    file = fopen(fullfile(pathname, filename), 'r');
%    input = fscanf(file,'%u\t%e\t%e\n',[3 inf]);
%    fclose(file);
%        
%    % Anzahl Eintraege/Zeilen in aktuell eingelesener Datei
%    entries = numel(input(1,:));
%        
%    for i=1:entries	% Durch alle Eintraege durchgehen.
%        % Jeder Eintrag entspricht einem Voxel und jedes Voxel 
%        %  hat eine Nummer. Anhang dieser Nummer wird die 
%        %  Koordiante des Voxels (nx, ny, nz) berechnet. Die 
%        %  Voxelnummer ist in Spalte 1 des Arrays input.
%        % Es gilt: Voxelnummer = nz + ny*nDivZ + nx*nDivY*nDivZ
%        nx = floor(input(1,i) / (nDivY*nDivZ));
%        ny = floor((input(1,i) - nx*nDivY*nDivZ) / nDivZ);
%        nz = input(1,i) - nx*nDivY*nDivZ - ny*nDivZ;
%            
%        n1 = ny+1; n2 = nDivZ-nz; nSchnitt = nx+1;
%            
%        % Daten werden nur fuer die Schnittebene, die der 
%        %  Betrachter spaeter als Plot sieht, rausgeschnitten.
%        if nSchnitt == schnittebene
%            matrix2D(n1, n2) = input(3,i)*simfaktor;
%        end
%    end
%    clear input; % clear memory
%end
%
%fig = figure('Position', [0, 0, 800, 664]); % Figure erstellen
%load cmap; colormap(cmap); % Colormap laden
%
%set(gca, 'XLim', [0 nDiv2*len2]); set(gca, 'YLim', [0 nDiv1*len1]);
%
%%clim = [1e-3 1e-1]; 	% anzuzeigendes Energieinterval Strahlung
%clim = [1e-2 1e4]; 	% anzuzeigendes Energieinterval Ionen
%
%linear_axes = subplot(1,1,1); 	% Plotten
%lin_plot = pcolor(linear_axes, matrix2D);
%
%set(gca, 'CLim', clim);
%colorbar('Yscale', 'log');
%
%% Logarithmischer Plot (Matlab ausgetrickst)
%set(linear_axes, 'Visible', 'off');
%set(lin_plot, 'Visible', 'off');
%
%log_axes = axes('Position', get(linear_axes, 'Position'));
%log_plot = pcolor(log_axes, log10(matrix2D));
%set(log_plot, 'EdgeColor','none');
%set(gca, 'CLim', log10(clim));
%
%axis square tight;
%
%title('Radiation Dosimetry of Patient (Gy)');
%\end{lstlisting}